﻿using System.Configuration;
using System.Data.EntityClient;
using System.Data.SqlClient;

namespace User.Web.Common
{
    public class ConnectionStringWeb
    {
        /// <summary>
        /// Gibt den Connectionstring zur DB zurück für das EntityFramework
        /// </summary>
        /// <param name="modelName">Der Name des Models, damit wir den MetaData String passend zusammenbauen können.</param>
        public virtual string GetConnectionString(string modelName)
        {
            //Initialize the EntityConnectionStringBuilder.
            EntityConnectionStringBuilder entityBuilder = new EntityConnectionStringBuilder();

            //Providernamen setzten
            entityBuilder.Provider = "System.Data.SqlClient";
            //Connectionstring setzten
            entityBuilder.ProviderConnectionString = GetSqlBuilder().ToString();
            //Metadaten setzten.
            entityBuilder.Metadata = string.Format(@"res://*/{0}.csdl|res://*/{0}.ssdl|res://*/{0}.msl", modelName);
            return entityBuilder.ConnectionString;
        }

        /// <summary>
        /// Gibt den ConnectionstringBuilder für "normale" SQL Connections zurück
        /// </summary>
        public virtual SqlConnectionStringBuilder GetSqlBuilder()
        {
            SqlConnectionStringBuilder sqlBuilder = new SqlConnectionStringBuilder();
            //Die Zugangsdaten aus der Web.Config laden, nicht den Connectionstring verwenden.
            sqlBuilder.DataSource = ConfigurationManager.AppSettings["DBDataSource"]; ;
            sqlBuilder.InitialCatalog = ConfigurationManager.AppSettings["DBCatalog"]; ;
            sqlBuilder.UserID = ConfigurationManager.AppSettings["DBUser"];
            sqlBuilder.Password = ConfigurationManager.AppSettings["DBPassword"];
            //Wichtige Option damit mehrere Abfragen geöffnet werden können 
            //um Subabfragen ausführen zu können von Untergordneten Projekten
            sqlBuilder.MultipleActiveResultSets = true;
            sqlBuilder.IntegratedSecurity = false;
            sqlBuilder.ApplicationName = "Management"; //Dient zur Identifizierung der DB Connection/Application wenn man z.B: Fehler auf dem DB Server sucht.

            return sqlBuilder;
        }
    }
}
